home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / ultqsrc.zip / SHALRATH.QC < prev    next >
Text File  |  1996-10-04  |  8KB  |  251 lines

  1. /*
  2. ==============================================================================
  3.  
  4. SHAL-RATH
  5.  
  6. ==============================================================================
  7. */
  8. $cd /raid/quake/id1/models/shalrath
  9. $origin 0 0 24
  10. $base base
  11. $skin skin
  12. $scale 0.7
  13.  
  14. $frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
  15. $frame attack9 attack10 attack11
  16.  
  17. $frame pain1 pain2 pain3 pain4 pain5 
  18.  
  19. $frame death1 death2 death3 death4 death5 death6 death7
  20.  
  21. $frame    walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
  22. $frame    walk11 walk12
  23.  
  24. void() shalrath_pain;
  25. void() ShalMissile;
  26. void() shal_stand     =[      $walk1,       shal_stand    ] {ai_stand();};
  27.  
  28. void() shal_walk1     =[      $walk2,       shal_walk2    ] {
  29. if (random() < 0.2)
  30.     sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE);
  31. ai_walk(6);
  32. };
  33. void() shal_walk2     =[      $walk3,       shal_walk3    ] {ai_walk(4);};
  34. void() shal_walk3     =[      $walk4,       shal_walk4    ] {ai_walk(0);};
  35. void() shal_walk4     =[      $walk5,       shal_walk5    ] {ai_walk(0);};
  36. void() shal_walk5     =[      $walk6,       shal_walk6    ] {ai_walk(0);};
  37. void() shal_walk6     =[      $walk7,       shal_walk7    ] {ai_walk(0);};
  38. void() shal_walk7     =[      $walk8,       shal_walk8    ] {ai_walk(5);};
  39. void() shal_walk8     =[      $walk9,       shal_walk9    ] {ai_walk(6);};
  40. void() shal_walk9     =[      $walk10,       shal_walk10    ] {ai_walk(5);};
  41. void() shal_walk10    =[      $walk11,       shal_walk11    ] {ai_walk(0);};
  42. void() shal_walk11    =[      $walk12,       shal_walk12    ] {ai_walk(4);};
  43. void() shal_walk12    =[      $walk1,       shal_walk1    ] {ai_walk(5);};
  44.  
  45. void() shal_run1     =[      $walk2,       shal_run2    ] {
  46. if (random() < 0.2)
  47.     sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE);
  48. ai_run(6);};
  49. void() shal_run2     =[      $walk3,       shal_run3    ] {ai_run(4);};
  50. void() shal_run3     =[      $walk4,       shal_run4    ] {ai_run(0);};
  51. void() shal_run4     =[      $walk5,       shal_run5    ] {ai_run(0);};
  52. void() shal_run5     =[      $walk6,       shal_run6    ] {ai_run(0);};
  53. void() shal_run6     =[      $walk7,       shal_run7    ] {ai_run(0);};
  54. void() shal_run7     =[      $walk8,       shal_run8    ] {ai_run(5);};
  55. void() shal_run8     =[      $walk9,       shal_run9    ] {ai_run(6);};
  56. void() shal_run9     =[      $walk10,       shal_run10    ] {ai_run(5);};
  57. void() shal_run10    =[      $walk11,       shal_run11    ] {ai_run(0);};
  58. void() shal_run11    =[      $walk12,       shal_run12    ] {ai_run(4);};
  59. void() shal_run12    =[      $walk1,       shal_run1    ] {ai_run(5);};
  60.  
  61. void() shal_attack1     =[      $attack1,       shal_attack2    ] {
  62. if (self.silencetime > time)
  63.       return;
  64. sound (self, CHAN_VOICE, "shalrath/attack.wav", 1, ATTN_NORM);
  65. ai_face();
  66. };
  67. void() shal_attack2     =[      $attack2,       shal_attack3    ] {ai_face();};
  68. void() shal_attack3     =[      $attack3,       shal_attack4    ] {ai_face();};
  69. void() shal_attack4     =[      $attack4,       shal_attack5    ] {ai_face();};
  70. void() shal_attack5     =[      $attack5,       shal_attack6    ] {ai_face();};
  71. void() shal_attack6     =[      $attack6,       shal_attack7    ] {ai_face();};
  72. void() shal_attack7     =[      $attack7,       shal_attack8    ] {ai_face();};
  73. void() shal_attack8     =[      $attack8,       shal_attack9    ] {ai_face();};
  74. void() shal_attack9     =[      $attack9,       shal_attack10   ] {ShalMissile();};
  75. void() shal_attack10    =[      $attack10,      shal_attack11   ] {ai_face();};
  76. void() shal_attack11    =[      $attack11,      shal_run1   ] {};
  77.  
  78. void() shal_pain1       =[      $pain1, shal_pain2      ] {};
  79. void() shal_pain2       =[      $pain2, shal_pain3      ] {};
  80. void() shal_pain3       =[      $pain3, shal_pain4      ] {};
  81. void() shal_pain4       =[      $pain4, shal_pain5      ] {};
  82. void() shal_pain5       =[      $pain5, shal_run1      ] {};
  83.  
  84. void() shal_death1      =[      $death1,        shal_death2     ] {};
  85. void() shal_death2      =[      $death2,        shal_death3     ] {};
  86. void() shal_death3      =[      $death3,        shal_death4     ] {};
  87. void() shal_death4      =[      $death4,        shal_death5     ] {};
  88. void() shal_death5      =[      $death5,        shal_death6     ] {};
  89. void() shal_death6      =[      $death6,        shal_death7     ] {};
  90. void() shal_death7      =[      $death7,        shal_death7    ] {MakeSolidCorpse ("progs/h_shal.mdl",self.classname);};
  91.  
  92. void() shalrath_pain =
  93. {
  94.     if (self.pain_finished > time)
  95.         return;
  96.  
  97.     sound (self, CHAN_VOICE, "shalrath/pain.wav", 1, ATTN_NORM);
  98.     shal_pain1();
  99.     self.pain_finished = time + 3;
  100. };
  101.  
  102. void() shalrath_die =
  103. {
  104. // check for gib
  105.         if (self.health < -80)
  106.     {
  107.         self.enemy.exp = self.enemy.exp + (130 - self.health)*skill;
  108.         self.netname = "progs/h_shal.mdl";
  109.         CorpseDie();
  110.         return;
  111.     }
  112.  
  113.     sound (self, CHAN_VOICE, "shalrath/death.wav", 1, ATTN_NORM);
  114.     shal_death1();
  115.     // insert death sounds here
  116. };
  117.  
  118. /*
  119. ================
  120. ShalMissile
  121. ================
  122. */
  123. void() ShalMissileTouch;
  124. void() ShalHome;
  125. void(vector dir,float dist,entity cont,entity targ) ShalMissile2 =
  126. {
  127.     local    entity     missile;
  128.         local   float   flytime;
  129.     flytime = dist * 0.002;
  130.     if (flytime < 0.1)
  131.         flytime = 0.1;
  132.  
  133.     missile = spawn ();
  134.         missile.owner = cont;
  135.         missile.classname = "shalmissile";
  136.     missile.solid = SOLID_BBOX;
  137.     missile.movetype = MOVETYPE_FLYMISSILE;
  138.     setmodel (missile, "progs/v_spike.mdl");
  139.  
  140.     setsize (missile, '0 0 0', '0 0 0');        
  141.  
  142.         missile.origin = cont.origin + '0 0 10';
  143.         missile.speed = 400;
  144.     missile.velocity = dir * 400;
  145.     missile.avelocity = '300 300 300';
  146.     missile.nextthink = flytime + time;
  147.     missile.think = ShalHome;
  148.         missile.enemy = targ;
  149.     missile.touch = ShalMissileTouch;
  150. };
  151.  
  152. void() ShalMissile =
  153. {
  154.         local   vector  dir;
  155.         local   float   dist;
  156.  
  157.     dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
  158.     dist = vlen (self.enemy.origin - self.origin);
  159.     self.effects = self.effects | EF_MUZZLEFLASH;
  160.     sound (self, CHAN_WEAPON, "shalrath/attack2.wav", 1, ATTN_NORM);
  161.         ShalMissile2(dir,dist,self,self.enemy);
  162. };
  163.  
  164.  
  165. void() ShalHome =
  166. {
  167.     local vector    dir, vtemp;
  168.     vtemp = self.enemy.origin + '0 0 10';
  169.         if (self.enemy.health < 1 || !(self.enemy.alive))
  170.     {
  171.         remove(self);
  172.         return;
  173.     }
  174.     dir = normalize(vtemp - self.origin);
  175.     if (skill == 3)
  176.         self.velocity = dir * 350;
  177.     else
  178.         self.velocity = dir * 250;
  179.     self.nextthink = time + 0.2;
  180.     self.think = ShalHome;    
  181. };
  182.  
  183. void() ShalMissileTouch =
  184. {
  185.     if (other == self.owner)
  186.         return;        // don't explode on owner
  187.  
  188.         if (other.reflecttime > time)
  189.               {
  190.               BounceBack(self.owner,other);
  191.               return;
  192.               }
  193.  
  194.     if (other.classname == "monster_zombie")
  195.         T_Damage (other, self, self, 110);    
  196.  
  197.         if (other.prottime < time)
  198.                 {
  199.                 T_RadiusDamage (self, self.owner, 40, world);
  200.                 }
  201.  
  202.         sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
  203.  
  204.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  205.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  206.     WriteCoord (MSG_BROADCAST, self.origin_x);
  207.     WriteCoord (MSG_BROADCAST, self.origin_y);
  208.     WriteCoord (MSG_BROADCAST, self.origin_z);
  209.  
  210.     self.velocity = '0 0 0';
  211.     self.touch = SUB_Null;
  212.     setmodel (self, "progs/s_explod.spr");
  213.     self.solid = SOLID_NOT;
  214.     s_explode1 ();
  215. };
  216.  
  217. //=================================================================
  218.  
  219. /*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) Ambush
  220. */
  221. void() monster_shalrath =
  222. {
  223.         if ((!self.charmed)&&(deathmatch))
  224.     {
  225.         remove(self);
  226.         return;
  227.     }
  228.     
  229.     self.solid = SOLID_SLIDEBOX;
  230.     self.movetype = MOVETYPE_STEP;
  231.     
  232.     setmodel (self, "progs/shalrath.mdl");
  233.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  234.     self.health = 400;
  235.         self.alive = TRUE;
  236.         self.classname ="vore";
  237.         self.initthink = monster_shalrath;
  238.  
  239.     self.th_stand = shal_stand;
  240.     self.th_walk = shal_walk1;
  241.     self.th_run = shal_run1;
  242.     self.th_die = shalrath_die;
  243.     self.th_pain = shalrath_pain;
  244.     self.th_missile = shal_attack1;
  245.         self.active = 3;
  246.  
  247.     self.think = walkmonster_start;
  248.     self.nextthink = time + 0.1 + random ()*0.1;    
  249.  
  250. };
  251.